![Start_pic](https://github.com/halltape/HalltapePassBot/blob/main/pics/github_jpg.jpg "github_jpg.jpg")
# HallTapePassBot
## Удобный telegram бот для генерации паролей и проверки их надежности

**Бот доступен по ссылке в телеграм** [HallTapePassBot](https://t.me/HalltapePassBot)
***

**Функции, доступные в боте:**

- Генерация легкого для запоминания пароля
```
Nag_Neg2*
```
- Генерация сложного пароля
```
4E4wCsph4swaCN72KE
```
- Генерация пароля для соц сетей
```
Dide_google_Vino5?*
```
- Генерация пароля со своим словом
```
Omu_github_Ahi3$*
```
- Проверка пароля на надежность. Например пользователь ввел свой пароль **amsterdam**
```
❌ Тебе нужно усилить твой пароль!

⚠️ Нет цифр
⚠️ Нет букв в верхнем регистре
⚠️ Нет специальных символов
⚠️ Твой пароль полностью или частично слит в сеть

⬇️ Слитые пароли
amsterdam
Amsterdam
AMSTERDAM
amsterda
amster
mster

⏳ На его взлом уйдет 23 минуты
Надежность пароля 43 %
```
- Генерация никнейма
```
Jenny_While
Mercy_Dad
Badly_Drawn
```
***
**Описание**

Основной файл, где запускается скрипт бота называется [main.py](https://github.com/halltape/HalltapePassBot/blob/main/src/main.py). Алгоритм генерации легкого для запоминания пароля собирает в случайном порядке буквы, чередуя согласные с гласными. При этом создаются псевдо-слова длиной от 3 до 5 букв включительно. В конце каждого пароля добавляются одна цифра и специальный символ.

Пароли для соц сетей собираются по аналогичному принципу, за исключением добавления ключевого слова в центр всей конструкции. Также возможно добавить свое уникальное слово.

Также бот всегда предлагает либо усложнить пароль, в случае негативного ответа, либо сделать красивее, если пароль является надежным. Алгоритм в обоих случаях идентичен. Из строки с паролем сначала вычленяются все гласные, согласные, цифры и символы в отдельные списки, а далее уже из этого собирается новый пароль. В случае, если элементов недостаточно, программа сама добавит свои.

При нажатии кнопки **Сложный пароль**, бот генерирует случайный набор элементов из маленьких и больших букв, цифр и специальных символов, заведомо перемешивая их в случайном порядке. Данный метод генерирует самый надежный из доступных вариантов пароль. 

Функция «Создать никнейм» берет два случайных английских слова из [базы данных](https://github.com/halltape/HalltapePassBot/blob/main/text_files/english_words.txt) и выводит на печать, разделяя знаком ‘_’

Оценка надежности пароля включает в себя следующие проверки:

- [ ] Наличие цифр
- [ ] Наличие маленьких букв
- [ ] Наличие больших букв
- [ ] Наличие специальных символов
- [ ] Уникальность пароля (наличие дублирующих символов)
- [ ] Наличие числовых последовательностей
- [ ] Наличие слитых паролей
***
**Надежность пароля**

В боте считается энтропия пароля. Проще говоря - это количество комбинаций пароля, учитывая количество комбинаций самих символов.

Например пароль **1Gh** будет иметь:

- 10 комбинаций цифр (0123456789)

- 26 комбинаций маленьких букв (алфавит)

- 26 комбинаций больших букв (алфавит)

В итоге мы получаем (62^3) = **238 328** комбинаций нашего пароля. Чем больше комбинаций, тем дольше его подбирать и тем выше его надежность.
***
**Время подбора пароля**

Бот берет количество комбинаций пароля и делит на среднюю скорость перебора паролей в секунду (3 900 000 000 комбинаций/сек). Величина взята из интернета, как усредненная. Учитывая, что разница между временем подбора в 100 веков и в 50 веков не принципиальна, то к скорости взлома стоит относиться формально.
***
### Сравнение обработки паролей

В таблице ниже представлено сравнение результатов проверки надежности паролей с помощью [HalltapePassBot](https://t.me/HalltapePassBot), [Kaspersky](https://password.kaspersky.com) и [2ip](https://2ip.io/passcheck/)

Вы можете заметить разницу в подходах, оценить уровень обработки вводимых данных, а также работу с граничными условиями.

Всем трём сервисам были скормлены заведомо ненадежные пароли, либо содержащие спорные моменты.
- ✅ - пароль надежный
- ❌ - пароль ненадежный

| Пароль | HalltapeBot | Kaspersky | 2ip |
|:------------:|:------------:|:------------:|:------------:|
| qwerty435345|❌|❌|✅|
| Комментарий|Слитый<br>пароль|Часто используемое<br>слово|Надёжный|
|3U54134(B55|❌|❌|❌|
|Комментарий|⚠️ Нет букв в нижнем регистре<br>⚠️ Больше четырех чисел друг за другом<br><br>Надежность пароля 69 %|Используются "клавиатурные" последовательности|Ненадёжный|
|3U54134(B55k|❌|✅|✅
|Комментарий|⚠️ Больше четырех чисел друг за другом<br><br>Надежность пароля 81 %|Надёжный|Надёжный|
|uuuuuuuuuuuuuu|❌|❌|✅|
|Комментарий|⚠️ Нет цифр<br>⚠️ Нет букв в верхнем регистре<br>⚠️ Нет специальных символов<br>⚠️ Повторяющиеся символы<br>⚠️ Малая уникальность пароля<br>Слитый пароль|Используются "клавиатурные" последовательности|Надёжный|
|bl00d1992bmw$|❌|✅|✅|
|Комментарий|⚠️ Нет букв в верхнем регистре<br>Слитый пароль|Надёжный|Надёжный|
|Mek_Wor3_|✅|❌|❌|
|Комментарий|На его взлом уйдет 5 лет|Часто используемое слово|Ненадёжный<br><br>Пароль может быть взломан за  9321 час|
|Добавим|в пароль|слово|google|
|Mek_Wor3_google|✅|✅|✅|
|Комментарий|Солнце уже потухнет, а твой пароль все еще будут подбирать|Для подбора вашего пароля потребуется 470 веков| Надёжный|

>Пароль **Mek_Wor3_** содержит в себе псевдо слова, но Касперский и 2ip посчитали его ненадежным. При этом добавление слова google внезапно делает его надежным. 

*В общем случае возможность генерировать пароль типа **Mek_Wor3_** создана для того, чтобы его можно было легко запомнить и в случае необходимости усложнить, добавлением названия сайта или приложения.*

*Вне зависимости от генератора паролей, самым надежным шифром всегда останется случайный набор из букв(маленьких и больших), цифр и специальных символов длиной от 10 элементов. Поэтому при возможности используйте пароли типа **Fg264TtFxzW2Vx9n8#***